import config from "@/api/config.js";
import GlobalStore from "../stores/modules/globalStore";
// import OSS from 'ali-oss'
import uploadFile from './uploadAliyun.js';
import useStore from '@/stores';
import {
	GetStsTemp
} from "../api/modules/system";




//是否实名  //是否设置密码
export function isRealName_SetPwd() {
	if (GlobalStore()?.userInfo?.isCertificate * 1 !== 1) {
		uni.$showModal({
			title: "",
			content: "暂未实名认证，是否前往实名？",
			confirmVal: '确定',
			cancelVal: '取消'
		}).then(() => {
			uni.navigateTo({
				url: "/pages/system/certification"
			})
		})
		return false
	}

	if (GlobalStore()?.userInfo?.isPayPassWord * 1 !== 1) {
		uni.$showModal({
			title: "",
			content: "暂未设置支付密码，请前往设置。",
			confirmVal: '确定',
			cancelVal: '取消'
		}).then(() => {
			uni.navigateTo({
				url: "/pages/login/pay_pwd"
			})
		})
		return false
	}
	return true
}



//	获取导航栏高度
export function getNavBarHeight() {
	//#ifdef H5
	return 0;
	//#endif
	return uni.getSystemInfo().statusBarHeight || 10; //如果没有获取到高度，那么指定10px；
}

// 	千分位格式化，可带正负号和小数
export function formatPrice(num) {
	let flag = false;
	num = num + '';
	let firstStr = num.slice(0, 1);
	if (firstStr === '+' || firstStr === '-') {
		num = num.slice(1);
		flag = true;
	}
	let integer = num.split('.')[0];
	let surplus = num.split('.')[1];
	const arr = integer.split('');
	const val = arr.reduceRight((acc, cur, index) => {
		if ((arr.length - 1 - index) % 3 === 2 && index !== 0) {
			cur = ',' + cur;
		}
		return cur + acc;
	}, '');
	if (flag === true) {
		flag = false;
		const money = surplus ? firstStr + val + '.' + surplus : firstStr + val
		if (money.indexOf('.') > -1) {
			return money
		} else {
			return money + '.00'
		}
	} else {
		const money = surplus ? val + '.' + surplus : val
		if (money.indexOf('.') > -1) {
			return money
		} else {
			return money + '.00'
		}
	}
}

// 	格式化目标时间据当前时间为xx天xxh
export function formatTime(date) {
	const targetDate = new Date(date);
	const currentDate = new Date();

	const timeDifference = targetDate - currentDate;
	const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24));
	const hours = Math.floor((timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
	if (days > 0) {
		return `${days}天${hours}h`
	} else {
		return `${hours}h`
	}
}

// 判断类型集合
export function checkStr(str, type) {
	switch (type) {
		case 'mobile': //手机号码
			return /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[0-9]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[0-9]{1}))+\d{8})$/
				.test(str);
		case 'tel': //座机
			return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
		case 'card': //身份证
			return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
		case 'mobileCode': //6位数字验证码
			return /^[0-9]{6}$/.test(str)
		case 'pwd': //密码以字母开头，长度在6~18之间，只能包含字母、数字和下划线
			return /^([a-zA-Z0-9_]){6,18}$/.test(str)
		case 'payPwd': //支付密码 6位纯数字
			return /^[0-9]{6}$/.test(str)
		case 'postal': //邮政编码
			return /[1-9]\d{5}(?!\d)/.test(str);
		case 'QQ': //QQ号
			return /^[1-9]\d{4,10}$/.test(str);
		case 'email': //邮箱
			return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
		case 'money': //金额(小数点2位)
			return /^\d*(?:\.\d{0,2})?$/.test(str);
		case 'URL': //网址
			return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
		case 'IP': //IP
			return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
		case 'date': //日期时间
			return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) ||
				/^(\d{4})\-(\d{2})\-(\d{2})$/
				.test(str)
		case 'number': //数字
			return /^[0-9]+$/.test(str);
		case 'english': //英文
			return /^[a-zA-Z]+$/.test(str);
		case 'mixed': //数字 + 字母 不区分大小写
			return /^[a-zA-Z0-9]+$/.test(str);
		case 'chinese': //中文
			return /[\u3400-\u4dbf\u4e00-\u9fff]/.test(str);
		case 'lower': //小写
			return /^[a-z]+$/.test(str);
		case 'upper': //大写
			return /^[A-Z]+$/.test(str);
		case 'HTML': //HTML标记
			return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
		case 'isChina': //是否包含汉字
			const reg = new RegExp("[\\u4E00-\\u9FFF]+", "g");
			return reg.test(str);
		default:
			return true;
	}
}
//不能0开头的整数
export function removeLeadingZeroes(inputStr) {
	// 使用正则表达式匹配以0开头但非全为0的非负整数  
	const match = inputStr.match(/^(0*[1-9]\d*)$/);
	if (match && match[0] !== '0') { // 确保匹配到的字符串不是单独的'0'  
		// 去除开头的0  
		return match[0].replace(/^0+/, '');
	}
	// 如果不匹配，返回原始字符串或抛出错误  
	return inputStr; // 或者你可以选择抛出错误：throw new Error('Input is not a non-negative integer without leading zeros');  
}
//不能0开头的非负数并且保留两位小数
export function formatNumber(inputStr) {
	// 去除字符串开头可能存在的空格  
	inputStr = inputStr.trim();

	// 尝试将字符串转换为数字  
	const number = parseFloat(inputStr);

	// 检查转换是否成功，并且是否为非负数  
	if (isNaN(number) || number < 0) {
		return inputStr; // 如果输入不是有效的非负数，返回原始字符串  
	}

	// 对于整数，检查是否以0开头（除了0本身）  
	if (Number.isInteger(number) && String(number).startsWith('0') && number !== 0) {
		return String(number).slice(1); // 去除整数部分的开头0  
	}

	// 对于小数，保留两位小数  
	return number.toFixed(2).replace(/\.00$/, ''); // 如果末尾是.00，则去除它  
}


//区分安卓还是ios
export function formateStr(text, type) {

	if (text) {
		const arr = text?.split("/")
		if (type === 1) {
			return arr[1]?.substring(0, 2)
		} else if (type === 2) {
			return arr[0]
		} else if (type === 3) {
			return arr[1]
		} else {
			return arr[2]
		}
	}
	return "--"
}

// 	图片上传
// folderType    用于阿里云传的文件夹类型
// sourceType    album 从相册选图，camera 使用相机
// count         最多可以选择的图片张数
export function chooseImage(count = 1, sourceType = 'album', folderType = 3) {
	return new Promise(async (resolve, reject) => {
		uni.chooseImage({
			sourceType: [sourceType],
			count: count,
			success: (result) => {
				let resSize = result.tempFiles[0].size;
				if (resSize > 30 * 1024 * 1024) {
					uni.showToast({
						title: "文件大小不能超过30M",
						icon: 'none',
						duration: 2000,
						mask: true
					});
					return
				}
			
				const suffix = result.tempFiles[0]?.name?.split(".")[1]
				uploadFile({
					filePath: result.tempFilePaths[0],
					suffix,
					folderType,
					success: (res) => {
						resolve(res)
					},
					fail: (err) => {
						uni.$uv.toast("上传失败,请稍后重试")
					}
				});
			},
			fail: (fail) => {
			
			}
		});


	})
};


//	手机号脱敏
export function phoneNumberMask(phoneNumber) {
	const prefix = phoneNumber.substring(0, 3);
	const suffix = phoneNumber.substring(phoneNumber.length - 4, phoneNumber.length);
	const middleDigits = phoneNumber.substring(3, phoneNumber.length - 4);

	return prefix + '****' + suffix;
}
// 	身份证号脱敏
export function desensitizeIdCard(idNumber) {
	const idLength = idNumber?.length;
	let desensitizedNumber = idNumber;
	// 替换中间八位数字为星号  
	desensitizedNumber = desensitizedNumber?.replace(idNumber?.slice(4, 14), function(match) {
		return '*'.repeat(match.length);
	});

	return desensitizedNumber;
}

//	图片下载
export function downloadImg(urlPath, name) {

	// #ifdef H5
	const oA = document.createElement("a");
	oA.download = name ?? new Date().getTime(); // 设置下载的文件名，默认是'下载'
	oA.href = urlPath; //临时路径再保存到本地
	document.body.appendChild(oA);
	oA.click();
	oA.remove(); // 下载之后把创建的元素删除
	// #endif

	// #ifndef H5
	uni.downloadFile({
		url: urlPath,
		success(res) {
			// 这时会产生一个临时路径，在应用本次启动期间可以正常使用。
			if (res.statusCode == 200) {
				// 需要将图片保存到相册
				uni.saveImageToPhotosAlbum({
					filePath: res.tempFilePath, // 图片文件路径，可以是临时文件路径也可以是永久文件路径，不支持网络图片路径
					success(res) {
						uni.$uv.toast('保存成功')
					},
					fail(err) {
						if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
							uni.$uv.toast('图片保存失败,请打开存储权限后重试！')
						}
					}
				})
			} else {
				uni.$uv.toast('下载失败,请稍后再试')
			}
		},
		fail(err) {
			uni.$uv.toast('下载失败,请稍后再试')
		}
	})
	// #endif
}


//复制
export function copy(value) {
	uni.setClipboardData({
		data: value,
		success: function() {
			// uni.$uv.toast('复制成功')
		}
	})
}

//	替换 url 地址
export function replaceUrl(url) {
	if (url) {
		if (url.includes("http://") || url.includes("https://")) {
			return url
		} else {
			const tag_url = GlobalStore()?.userInfo?.ossFilePreview
			return tag_url + url
		}
	}
}

//	版本号比较
export function compareVersions(v1, v2) {
	const version1 = v1.split('.').map(Number); // 转换为整数数组  
	const version2 = v2.split('.').map(Number);

	// 确保两个数组至少有一个公共的索引  
	const maxLength = Math.max(version1.length, version2.length);

	// 逐个比较每一部分  
	for (let i = 0; i < maxLength; i++) {
		const num1 = i < version1.length ? version1[i] : 0; // 如果v1较短，则使用0  
		const num2 = i < version2.length ? version2[i] : 0; // 如果v2较短，则使用0  

		if (num1 < num2) {
			return -1; // v1 < v2  
		} else if (num1 > num2) {
			return 1; // v1 > v2  
		}
	}
	return 0; // v1 == v2  
}

//	判断是否为 Safari 浏览器且从添加至桌面启动
export function isDesktopSafari() {
	// #ifdef H5
	return ("standalone" in window.navigator) && window.navigator.standalone
	// #endif
	// #ifndef H5
	return false
	// #endif
}

//	应用商店上报注册数量标识
export function getOaidAndImei() {
	return new Promise((succ, error) => {
		// #ifdef APP-PLUS
		plus.device.getOAID({
			success: function(e) {
				if (e.oaid) {
					succ({
						id: e.oaid,
						type: 2 //	oaid
					})
				}
			},
			fail(err) {
				plus.device.getInfo({
					success: function(e) {
						if (typeof e.imei === "string") {
							succ({
								id: e.imei?.split(",")[0],
								type: 1 //	imei
							})
						} else if (e.imei?.length > 0) {
							succ({
								id: e.imei[0],
								type: 1 //	imei
							})
						}
					},
					fail() {
						succ({
							id: "",
							type: 1 //	imei
						})
					}
				})
			}
		});
		// #endif
		// #ifndef APP-PLUS
		succ({
			id: "",
			type: 0 //	非App
		})
		// #endif
	})
}